iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
0

在前一篇文章中,向大家介紹了 Neo4j 各種預存資料集與圖形資料庫應用,但相信在大部分的情況,我們手邊已經有累積的資料和檔案,這時候就需要匯入工具,今天就來介紹如何匯入 CSV 檔案到 Neo4j 資料庫。

Import CSV by Cypher (in Neo4j Browser)

Neo4j 預設情況下,基於安全性的考量,要匯入的 csv 檔案必須先放到該資料庫的 Import Folder,每個資料庫的位置不同,以我系統 Mac OS 取得的某個資料庫的 Import Folder 如下

/Users/egghsu/Library/Application Support/com.Neo4j.Relate/Data/dbmss/dbms-5aab44e4-5d1d-4b91-94ef-84a7653d534f/import

查詢 Import Folder 的步驟,先點選資料庫的 Manage

Neo4j DB Manage

接著在 Open Folder 中選擇 Import 即可

Neo4j DB Import Folder

把 CSV 檔案複製到 Import Folder 之後就可以開始操作了,檔案都必須以 file:/// 作為開頭,以下直接提供範例

從 movies.csv 讀入資料,一次讀取一行,並列出前面十行的內容。這部分只是讀取 CSV,並沒有建立或匯入任何圖形資料庫。

LOAD CSV FROM "file:///movies.csv" AS line
RETURN line
LIMIT 10

CSV 也可以是網路位置

LOAD CSV FROM "http://www.somewhere/movies.csv" AS line
RETURN line
LIMIT 10

從 movies.csv 讀入資料,一次讀取一行,並將第一欄作為 title 屬性,第二欄作為 released 屬性建立 Movie 節點。

LOAD CSV FROM "file:///movies.csv" AS line
CREATE (:Movie { title: line[0], released: line[1]})

與前例相同,差別是有引用 CSV Header,語法更直覺。另外,也可以自訂 CSV 分隔符號。

LOAD CSV WITH HEADERS FROM "file:///movies.csv" AS line FIELDTERMINATOR ';'
CREATE (:Movie { title: line.title, released: line.released})

Import CSV by Cypher shell

不過實務上,匯入 CSV 如果會是個定期作業,當然就無法總是透過 Neo4j Browser 操作,建議用 cypher-shell 命令列工具會更有彈性,以下舉例,暫不做深入介紹。

bin/cypher-shell -u neo4j -p neo4j 'LOAD CSV FROM "file:///movies.csv" AS line RETURN line LIMIT 5'

Bulk Import CSV

如果要匯入的 CSV 資料量相當大,建議多加上 USING PERIODIC COMMIT 敘述,讓 Neo4j 每匯入一定數量的資料行之後就 commit,避免在交易過程中耗費大量記憶體。因為整個 LOAD CSV 預設就是一筆交易,只有全部成功或是全部失敗,但 CSV 檔案太大就會導致 Neo4j 一直在讀取而無法完成交易,最後記憶體就會耗盡。

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///movies.csv" AS line
CREATE (:Movie { title: line.title, released: line.released})

PERIODIC COMMIT 預設是每 1000 筆就 commit一次,你可以修改預設值如下,改為 2000 筆 commit 一次。

USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///movies.csv" AS line
CREATE (:Movie { title: line.title, released: line.released})

以上是今天的分享,主要是以 Cypher 語法的方式匯入 CSV 檔案,之後再介紹其他方式囉,謝謝您的閱讀~


上一篇
Neo4j 預存資料集與 Sandbox
下一篇
Neo4j 大量匯入 CSV 資料
系列文
看圖說故事,讓 Neo4j 重新詮釋你的資料庫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言